O'zbek

TypeScript andoza literal turlarini va ular yordamida yuqori darajada turi xavfsiz va qoʻllab-quvvatlanadigan API-lar yaratish, kod sifatini va dasturchi tajribasini yaxshilash usullarini oʻrganing.

Turi Xavfsiz APIlar uchun TypeScript Andoza Literal Turlari

TypeScript andoza literal turlari — bu TypeScript 4.1 versiyasida taqdim etilgan kuchli xususiyat boʻlib, u sizga tur darajasida satrlarni manipulyatsiya qilish imkonini beradi. Ular yuqori darajada turi xavfsiz va qoʻllab-quvvatlanadigan API-lar yaratish uchun keng imkoniyatlar ochib beradi, bu esa odatda faqat ish vaqtida yuzaga keladigan xatoliklarni kompilyatsiya vaqtidayoq aniqlashga yordam beradi. Bu esa, oʻz navbatida, dasturchi tajribasini yaxshilaydi, refaktoringni osonlashtiradi va kodni yanada mustahkam qiladi.

Andoza literal turlari nima?

Asosan, andoza literal turlari — bu satr literal turlari, birlashma turlari va tur oʻzgaruvchilarini birlashtirish orqali tuzilishi mumkin boʻlgan satr literal turlaridir. Ularni turlar uchun satr interpolyatsiyasi deb tasavvur qiling. Bu mavjud turlar asosida yangi turlar yaratish imkonini beradi, bu esa yuqori darajadagi moslashuvchanlik va ifodalilikni taʼminlaydi.

Mana oddiy bir misol:

type Greeting = "Hello, World!";

type PersonalizedGreeting<T extends string> = `Hello, ${T}!`;

type MyGreeting = PersonalizedGreeting<"Alice">; // type MyGreeting = "Hello, Alice!"

Ushbu misolda, PersonalizedGreeting — bu T umumiy tur parametrini qabul qiluvchi andoza literal turi boʻlib, u satr boʻlishi kerak. Keyin u "Hello, " satr literalini T qiymati va "!" satr literali bilan interpolyatsiya qilib, yangi tur yaratadi. Natijaviy tur, MyGreeting, "Hello, Alice!" boʻladi.

Andoza literal turlaridan foydalanishning afzalliklari

Haqiqiy hayotdagi qoʻllash holatlari

1. API endpoint'larini aniqlash

Andoza literal turlari API endpoint turlarini aniqlash uchun ishlatilishi mumkin, bu esa API ga toʻgʻri parametrlar uzatilishini va javob toʻgʻri qayta ishlanishini taʼminlaydi. Masalan, USD, EUR va JPY kabi bir nechta valyutalarni qoʻllab-quvvatlaydigan elektron tijorat platformasini koʻrib chiqaylik.

type Currency = "USD" | "EUR" | "JPY";
type ProductID = string; //Amalda bu aniqroq tur boʻlishi mumkin

type GetProductEndpoint<C extends Currency> = `/products/${ProductID}/${C}`;

type USDEndpoint = GetProductEndpoint<"USD">; // type USDEndpoint = "/products/${string}/USD"

Ushbu misol valyutani tur parametri sifatida qabul qiladigan GetProductEndpoint turini belgilaydi. Natijaviy tur — bu belgilangan valyutadagi mahsulotni olish uchun API endpoint'ini ifodalovchi satr literal turidir. Ushbu yondashuvdan foydalanib, siz API endpoint'ining har doim toʻgʻri tuzilishini va toʻgʻri valyuta ishlatilishini taʼminlay olasiz.

2. Maʼlumotlarni tekshirish

Andoza literal turlari maʼlumotlarni kompilyatsiya vaqtida tekshirish uchun ishlatilishi mumkin. Masalan, ularni telefon raqami yoki elektron pochta manzili formatini tekshirish uchun ishlatishingiz mumkin. Mamlakat kodiga qarab turli formatlarga ega boʻlishi mumkin boʻlgan xalqaro telefon raqamlarini tekshirishingiz kerakligini tasavvur qiling.

type CountryCode = "+1" | "+44" | "+81"; // AQSH, Buyuk Britaniya, Yaponiya
type PhoneNumber<C extends CountryCode, N extends string> = `${C}-${N}`;

type ValidUSPhoneNumber = PhoneNumber<"+1", "555-123-4567">; // type ValidUSPhoneNumber = "+1-555-123-4567"

//Eslatma: Murakkabroq tekshiruvlar andoza literal turlarini shartli turlar bilan birlashtirishni talab qilishi mumkin.

Ushbu misol muayyan formatni talab qiluvchi oddiy telefon raqami turini qanday yaratish mumkinligini koʻrsatadi. Murakkabroq tekshiruvlar shartli turlar va andoza literali ichidagi regular ifodalarga oʻxshash naqshlarni birlashtirishni talab qilishi mumkin.

3. Kod generatsiyasi

Andoza literal turlari kompilyatsiya vaqtida kod yaratish uchun ishlatilishi mumkin. Masalan, ularni React komponent nomlarini ular koʻrsatadigan maʼlumotlar nomiga asoslanib yaratish uchun ishlatishingiz mumkin. Umumiy naqsh — bu <Entity>Details naqshiga amal qiladigan komponent nomlarini yaratishdir.

type Entity = "User" | "Product" | "Order";
type ComponentName<E extends Entity> = `${E}Details`;

type UserDetailsComponent = ComponentName<"User">; // type UserDetailsComponent = "UserDetails"

Bu sizga nomlashdagi ziddiyatlar xavfini kamaytiradigan va kodning oʻqilishini yaxshilaydigan izchil va tavsiflovchi komponent nomlarini avtomatik ravishda yaratishga imkon beradi.

4. Hodisalarni boshqarish

Andoza literal turlari hodisa nomlarini turi xavfsiz tarzda aniqlash uchun ajoyib vosita boʻlib, hodisa tinglovchilarining toʻgʻri roʻyxatdan oʻtishini va hodisa ishlovchilarining kutilgan maʼlumotlarni olishini taʼminlaydi. Hodisalar modul va hodisa turi boʻyicha tasniflanib, ikki nuqta bilan ajratilgan tizimni koʻrib chiqaylik.

type Module = "user" | "product" | "order";
type EventType = "created" | "updated" | "deleted";
type EventName<M extends Module, E extends EventType> = `${M}:${E}`;

type UserCreatedEvent = EventName<"user", "created">; // type UserCreatedEvent = "user:created"

interface EventMap {
  [key: EventName<Module, EventType>]: (data: any) => void; //Misol: Hodisalarni boshqarish uchun tur
}

Ushbu misol izchil naqshga amal qiladigan hodisa nomlarini qanday yaratishni koʻrsatadi, bu esa hodisa tizimining umumiy tuzilishini va tur xavfsizligini yaxshilaydi.

Ilgʻor texnikalar

1. Shartli turlar bilan birlashtirish

Andoza literal turlarini shartli turlar bilan birlashtirib, yanada murakkab tur transformatsiyalarini yaratish mumkin. Shartli turlar sizga boshqa turlarga bogʻliq boʻlgan turlarni aniqlash imkonini beradi, bu esa tur darajasida murakkab mantiqni bajarishga yordam beradi.

type ToUpperCase<S extends string> = S extends Uppercase<S> ? S : Uppercase<S>;

type MaybeUpperCase<S extends string, Upper extends boolean> = Upper extends true ? ToUpperCase<S> : S;

type Example = MaybeUpperCase<"hello", true>; // type Example = "HELLO"
type Example2 = MaybeUpperCase<"world", false>; // type Example2 = "world"

Ushbu misolda MaybeUpperCase satr va mantiqiy (boolean) qiymatni qabul qiladi. Agar mantiqiy qiymat true boʻlsa, u satrni katta harflarga oʻtkazadi; aks holda, satrni oʻzgarishsiz qaytaradi. Bu satr turlarini shartli ravishda qanday oʻzgartirish mumkinligini koʻrsatadi.

2. Xaritalangan turlar bilan foydalanish

Andoza literal turlari obyekt turining kalitlarini oʻzgartirish uchun xaritalangan turlar bilan ishlatilishi mumkin. Xaritalangan turlar mavjud tur kalitlari boʻylab iteratsiya qilib va har bir kalitga transformatsiya qoʻllab, yangi turlar yaratish imkonini beradi. Obyekt kalitlariga prefiks yoki suffiks qoʻshish keng tarqalgan qoʻllash holatidir.

type MyObject = {
  name: string;
  age: number;
};

type AddPrefix<T, Prefix extends string> = {
  [K in keyof T as `${Prefix}${string & K}`]: T[K];
};

type PrefixedObject = AddPrefix<MyObject, "data_">;
// type PrefixedObject = {
//    data_name: string;
//    data_age: number;
// }

Bu yerda AddPrefix obyekt turi va prefiksni qabul qiladi. U keyin bir xil xususiyatlarga ega boʻlgan, lekin har bir kalitga prefiks qoʻshilgan yangi obyekt turini yaratadi. Bu maʼlumotlar uzatish obyektlarini (DTO) yoki xususiyatlar nomlarini oʻzgartirish kerak boʻlgan boshqa turlarni yaratishda foydali boʻlishi mumkin.

3. Ichki satrlarni manipulyatsiya qilish turlari

TypeScript bir nechta ichki satrlarni manipulyatsiya qilish turlarini taqdim etadi, masalan, Uppercase, Lowercase, Capitalize va Uncapitalize. Ular andoza literal turlari bilan birgalikda murakkabroq satr transformatsiyalarini bajarish uchun ishlatilishi mumkin.

type MyString = "hello world";

type CapitalizedString = Capitalize<MyString>; // type CapitalizedString = "Hello world"

type UpperCasedString = Uppercase<MyString>;   // type UpperCasedString = "HELLO WORLD"

Ushbu ichki turlar maxsus tur mantiqini yozmasdan, keng tarqalgan satr manipulyatsiyalarini bajarishni osonlashtiradi.

Eng yaxshi amaliyotlar

Umumiy xatolar

Alternativlar

Andoza literal turlari API ishlab chiqishda tur xavfsizligiga erishishning kuchli usulini taklif qilsa-da, baʼzi hollarda mosroq boʻlishi mumkin boʻlgan alternativ yondashuvlar ham mavjud.

Xulosa

TypeScript andoza literal turlari — bu turi xavfsiz va qoʻllab-quvvatlanadigan API-lar yaratish uchun qimmatli vositadir. Ular sizga tur darajasida satrlarni manipulyatsiya qilish imkonini beradi, bu esa xatoliklarni kompilyatsiya vaqtida aniqlashga va kodingizning umumiy sifatini yaxshilashga yordam beradi. Ushbu maqolada muhokama qilingan tushunchalar va texnikalarni tushunib, siz yanada mustahkam, ishonchli va dasturchilar uchun qulay API-lar yaratish uchun andoza literal turlaridan foydalanishingiz mumkin. Murakkab veb-ilova yoki oddiy buyruq qatori vositasini yaratayotgan boʻlsangiz ham, andoza literal turlari sizga yaxshiroq TypeScript kodi yozishga yordam beradi.

Ularning imkoniyatlarini toʻliq anglab yetish uchun oʻz loyihalaringizda qoʻshimcha misollarni oʻrganishni va andoza literal turlari bilan tajriba qilishni oʻylab koʻring. Ulardan qanchalik koʻp foydalansangiz, ularning sintaksisi va imkoniyatlari bilan shunchalik qulay boʻlasiz, bu esa sizga haqiqatan ham turi xavfsiz va mustahkam ilovalar yaratish imkonini beradi.